Fixes for Xen console buffer ring.
kaf24@plym.cl.cam.ac.uk
kaf24@scramble.cl.cam.ac.uk
kaf24@striker.cl.cam.ac.uk
+laudney@eclipse.(none)
lynx@idefix.cl.cam.ac.uk
rac61@labyrinth.cl.cam.ac.uk
rgr22@boulderdash.cl.cam.ac.uk
#define CONSOLE_RING_SIZE 16392
static char *argv0 = "read_console_ring";
-static long read_console_ring(char *str, unsigned count)
+static long read_console_ring(unsigned long str, unsigned count)
{
int ret;
dom0_op_t op;
ret = do_dom0_op(&op);
if (ret > 0) {
- *(str + ret) = '\0';
+ *((char *)str + ret) = '\0';
}
return ret;
return 1;
}
- if ( read_console_ring(str, CONSOLE_RING_SIZE) < 0 ) {
+ if ( read_console_ring((unsigned long)str, CONSOLE_RING_SIZE) < 0 ) {
printf("Read console ring error.\n");
printf("%s", str);
return 1;
#include <xeno/console.h>
#include <asm-i386/uaccess.h>
+console_ring_t console_ring = {
+ .len = 0
+};
+
void init_console_ring()
{
console_ring.len = 0;
}
-long read_console_ring(char *str, unsigned int count)
+long read_console_ring(unsigned long str, unsigned int count)
{
unsigned int len;
len = (console_ring.len < count)? console_ring.len : count;
- if ( copy_to_user(str, console_ring.buf, len) )
+ if ( copy_to_user((char *)str, console_ring.buf, len) )
return -EFAULT;
return len;
case DOM0_READCONSOLE:
{
- extern long read_console_ring(char *, unsigned int);
+ extern long read_console_ring(unsigned long, unsigned int);
ret = read_console_ring(op.u.readconsole.str,
op.u.readconsole.count);
}
}
init_serial();
- init_console_ring();
init_vga();
cls();
#define DOM0_READCONSOLE 19
typedef struct dom0_readconsole_st
{
- char *str;
+ unsigned long str;
unsigned int count;
} dom0_readconsole_t;
unsigned int len;
} console_ring_t;
-console_ring_t console_ring;
+extern console_ring_t console_ring;
void init_console_ring();
-long read_console_ring(char *str, unsigned int count);
+long read_console_ring(unsigned long, unsigned int);